#include <stdio.h>
#include <stdlib.h>

struct ListNode {
    int data;
    struct ListNode *next;
};

struct ListNode *createlist(); /*裁判实现，细节不表*/
struct ListNode *reverse(struct ListNode *head) {
    struct ListNode *current = head; // 当前节点
    struct ListNode *prev = NULL;     // 上一个节点
    struct ListNode *next = NULL;     // 下一个节点

    while (current) {
        next = current->next; // 暂存下一个节点
        current->next = prev; // 反转当前节点指向
        prev = current;       // 移动prev到当前节点
        current = next;       // 移动到下一个节点
    }

    return prev; // 返回新的头指针
}
void printlist( struct ListNode *head )
{
    struct ListNode *p = head;
    while (p) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

int main()
{
    struct ListNode  *head;

    head = createlist();
    head = reverse(head);
    printlist(head);

    return 0;
}

/* 你的代码将被嵌在这里 */